/*
 * Copyright (c) 2008-2012
 * LANIT
 * All rights reserved.
 *
 * This product and related documentation are protected by copyright and
 * distributed under licenses restricting its use, copying, distribution, and
 * decompilation. No part of this product or related documentation may be
 * reproduced in any form by any means without prior written authorization of
 * LANIT and its licensors, if any.
 *
 * $Id$
 */
package ru.lanit.bpm.ipa.timesheet;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.XppDriver;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.*;

public class Settings {

    private String dataSourceDriver;
    private String dataSourceSubProtocol;
    private String dataSourceIp;
    private String dataSourcePort;
    private String dataSourceDBName;
    private String dataSourceUser;
    private String dataSourcePassword;
    private boolean dataSourceWrapIntoTransactionProxy;
    private boolean dataSourceUseConnectionPool;
    private String nonWorkTimeOD;
    private String nonWorkTimeRole;
    private String divisionRole;
    private String dummyEmail;
    private String dummyPyUserIdentifier;
    private String projectRole;

    private Collection<String> specs;
    private Collection<String> projects;
    private Collection<String> trashes;

    private Map<String, String> spec2division;
    private Map<String, Collection<String>> project2ODs;
    private Map<String, Long> division2grade;

    public Settings() {
        this.specs = new ArrayList<String>();

        this.projects = new ArrayList<String>();
        this.trashes = new ArrayList<String>();
        this.spec2division = new HashMap<String, String>();
        this.project2ODs = new HashMap<String, Collection<String>>();
        this.division2grade = new HashMap<String, Long>();
    }

    public String getDataSourceDriver() {
        return dataSourceDriver;
    }

    public String getDataSourceSubProtocol() {
        return dataSourceSubProtocol;
    }

    public String getDataSourceIp() {
        return dataSourceIp;
    }

    public String getDataSourcePort() {
        return dataSourcePort;
    }

    public String getDataSourceDBName() {
        return dataSourceDBName;
    }

    public String getDataSourceUser() {
        return dataSourceUser;
    }

    public String getDataSourcePassword() {
        return dataSourcePassword;
    }

    public boolean isDataSourceWrapIntoTransactionProxy() {
        return dataSourceWrapIntoTransactionProxy;
    }

    public boolean isDataSourceUseConnectionPool() {
        return dataSourceUseConnectionPool;
    }

    public Collection<String> getTrashes() {
        return trashes;
    }

    public String getNonWorkTimeOD() {
        return nonWorkTimeOD;
    }

    public String getNonWorkTimeRole() {
        return nonWorkTimeRole;
    }

    public String getDivisionRole() {
        return divisionRole;
    }

    public String getDummyEmail() {
        return dummyEmail;
    }

    public void setDummyEmail(String dummyEmail) {
        this.dummyEmail = dummyEmail;
    }

    public String getDummyPyUserIdentifier() {
        return dummyPyUserIdentifier;
    }

    public void setDummyPyUserIdentifier(String dummyPyUserIdentifier) {
        this.dummyPyUserIdentifier = dummyPyUserIdentifier;
    }

    public String getProjectRole() {
        return projectRole;
    }

    public void setProjectRole(String projectRole) {
        this.projectRole = projectRole;
    }

    public Collection<String> getSpecs() {
        return specs;
    }

    public Collection<String> getProjects() {
        return projects;
    }

    public Map<String, String> getSpec2division() {
        return spec2division;
    }

    public Map<String, Collection<String>> getProject2ODs() {
        return project2ODs;
    }

    public Map<String, Long> getDivision2grade() {
        return division2grade;
    }

    private void mapping() {

        dataSourceDriver = "oracle.jdbc.driver.OracleDriver";
        dataSourceSubProtocol = "jdbc:oracle:thin:@";
        dataSourceIp = "192.168.75.161";
        dataSourcePort = "1521";
        dataSourceDBName = "orclpega";
        dataSourceUser = "PEGAINT";
        dataSourcePassword = "PEGAINT";
        dataSourceWrapIntoTransactionProxy = false;
        dataSourceUseConnectionPool = false;

        specs.add("PR-менеджер");
        specs.add("Ассистент");
        specs.add("Администратор");
        specs.add("Аналитик");
        specs.add("Технический писатель");
        specs.add("Архитектор");
        specs.add("Инженер");
        specs.add("Разработчик");
        specs.add("Тестировщик");
        specs.add("Тех. менеджер");
        specs.add("Руководитель проектов");
        specs.add("Руководитель отдела маркетинга");

        trashes.add("(пусто)");
        trashes.add("Отпуска");
        trashes.add("вакансия");

        nonWorkTimeOD = "Нерабочее время";
        nonWorkTimeRole = "Сотрудник";
        divisionRole = "Сотрудник отдела";
        dummyEmail = "dummy@lanit.ru";
        dummyPyUserIdentifier = "dummy";
        projectRole = "Участник проекта";

        spec2division.put("PR-менеджер", "Отдел маркетинга и коммуникаций");
        spec2division.put("Ассистент", "Отдел маркетинга и коммуникаций");
        spec2division.put("Администратор", "Отдел управления проектами");
        spec2division.put("Аналитик", "Отдел аналитики");
        spec2division.put("Технический писатель", "Отдел аналитики");
        spec2division.put("Архитектор", "Отдел архитектуры и разработки");
        spec2division.put("Инженер", "Отдел архитектуры и разработки");
        spec2division.put("Разработчик", "Отдел архитектуры и разработки");
        spec2division.put("Тестировщик", "Отдел архитектуры и разработки");
        spec2division.put("Тех. менеджер", "Отдел управления проектами");
        spec2division.put("Руководитель отдела маркетинга", "Отдел маркетинга и коммуникаций");
        spec2division.put("Руководитель проектов", "Отдел управления проектами");

        /*division2grade.put("Отдел маркетинга и коммуникаций", 1L);
        division2grade.put("Отдел управления проектами", 2L);
        division2grade.put("Отдел аналитики", 3L);
        division2grade.put("Отдел архитектуры и разработки", 4L);*/

        List<String> ods;

        projects.add("МЗП");
        ods = new ArrayList<String>();
        ods.add("Сбербанк - МЗП - Этап 1 - PRPC");
        ods.add("Сбербанк - МЗП - Этап 1 - JEE");
        project2ODs.put("МЗП", ods);

        projects.add("Ла-Манш");
        ods = new ArrayList<String>();
        ods.add("Сбербанк - Ла-Манш - Фаза 2");
        ods.add("Сбербанк - Ла-Манш - Фаза 3");
        ods.add("Сбербанк - Ла-Манш - Фаза 4");
        ods.add("Сбербанк - Ла-Манш - Тираж");
        project2ODs.put("Ла-Манш", ods);

        projects.add("ПД");
        ods = new ArrayList<String>();
        ods.add("Сбербанк - ПД - Фаза 1");
        ods.add("Сбербанк - ПД - Фаза 2");
        ods.add("Сбербанк - ПД - Фаза 3");
        project2ODs.put("ПД", ods);

        projects.add("Поддержка");
        ods = new ArrayList<String>();
        ods.add("Сбербанк - Поддержка");
        project2ODs.put("Поддержка", ods);

        projects.add("Пр-т внутр. авт.");
        ods = new ArrayList<String>();
        ods.add("Проект внутренней автоматизации");
        project2ODs.put("Пр-т внутр. авт.", ods);

        projects.add("Маркетинг");
        ods = new ArrayList<String>();
        ods.add("Отдел маркетинга и коммуникаций");
        project2ODs.put("Маркетинг", ods);

        projects.add("Пресейл");
        ods = new ArrayList<String>();
        ods.add("Блок развития бизнеса");
        project2ODs.put("Пресейл", ods);
    }

    public static void main(String[] args) throws Exception {
        XStream xStream = new XStream(new XppDriver());
        Settings settings = new Settings();

        settings.mapping();

        String path = "src/setting/settings.xml";
        new File(path).delete();

        Writer writer = new BufferedWriter(new FileWriter(path));
        xStream.toXML(settings, writer);
    }
}
